/*!
 * \file UftLatencyTool.h
 * \project	WonderTrader
 *
 * \author Wesley
 * \date 2020/03/30
 * 
 * \brief UFT超高频交易延迟测试工具头文件
 * 
 * \details 本文件定义了UFT超高频交易延迟测试工具类，用于测试和评估
 *          WonderTrader超高频交易引擎的性能和延迟特性。
 *          
 *          主要功能包括：
 *          - UFT引擎性能基准测试
 *          - 微秒级延迟测量和统计分析
 *          - 模拟超高频交易环境搭建
 *          - 测试策略和适配器管理
 *          - CPU核心绑定优化
 *          - 超高频数据模拟和处理
 */
#pragma once
#include "../WtUftCore/WtUftEngine.h"
#include "../WtUftCore/UftStrategyMgr.h"
#include "../WtUftCore/TraderAdapter.h"
#include "../WtUftCore/ParserAdapter.h"

#include "../WTSTools/WTSBaseDataMgr.h"

NS_WTP_BEGIN
class WTSVariant;
NS_WTP_END

namespace uft
{
	/*!
	 * \class UftLatencyTool
	 * \brief UFT超高频交易延迟测试工具类
	 * 
	 * \details UftLatencyTool是专门用于测试WonderTrader超高频交易引擎性能的工具类。
	 *          该工具能够：
	 *          - 创建完整的UFT测试环境
	 *          - 模拟超高频行情数据流
	 *          - 测量引擎内部处理延迟（微秒级）
	 *          - 评估策略执行性能
	 *          - 提供详细的性能统计报告
	 *          - 支持CPU核心绑定优化
	 *          
	 *          测试工具集成了完整的超高频交易系统组件，包括行情解析器、
	 *          交易适配器、策略管理器等，能够提供真实的测试环境。
	 * 
	 * \note 该工具主要用于超高频交易性能测试和系统调优
	 * \warning 测试过程中会产生大量模拟数据，注意系统资源使用
	 */
	class UftLatencyTool
	{
	public:
		/*!
		 * \brief 构造函数
		 * 
		 * \details 初始化UFT延迟测试工具，设置默认参数和初始状态
		 */
		UftLatencyTool();
		
		/*!
		 * \brief 析构函数
		 * 
		 * \details 清理测试工具资源，释放相关组件
		 */
		~UftLatencyTool();

	public:
		/*!
		 * \brief 初始化测试工具
		 * 
		 * \details 初始化UFT延迟测试工具的所有组件：
		 *          - 加载配置文件
		 *          - 初始化基础数据管理器
		 *          - 设置测试参数（次数、CPU核心等）
		 *          - 初始化UFT引擎和相关模块
		 *          - 创建测试策略和适配器
		 * 
		 * \return bool 初始化是否成功
		 */
		bool init();

		/*!
		 * \brief 运行延迟测试
		 * 
		 * \details 启动UFT延迟测试流程：
		 *          - 绑定指定的CPU核心（如果配置）
		 *          - 启动行情解析器和交易适配器
		 *          - 运行UFT引擎
		 *          - 执行指定次数的模拟测试
		 *          - 收集和输出性能统计数据
		 */
		void run();

	private:
		/*!
		 * \brief 初始化测试模块
		 * 
		 * \details 创建和初始化测试所需的模拟模块：
		 *          - 创建测试行情解析器
		 *          - 创建测试交易接口
		 *          - 配置适配器管理器
		 * 
		 * \return bool 模块初始化是否成功
		 */
		bool initModules();
		
		/*!
		 * \brief 初始化测试策略
		 * 
		 * \details 创建和配置测试策略：
		 *          - 创建测试策略实例
		 *          - 设置策略上下文
		 *          - 绑定交易适配器
		 *          - 添加到UFT引擎
		 * 
		 * \return bool 策略初始化是否成功
		 */
		bool initStrategies();

		/*!
		 * \brief 初始化UFT引擎
		 * 
		 * \details 根据配置初始化UFT引擎：
		 *          - 设置引擎参数
		 *          - 关联基础数据管理器
		 *          - 设置适配器管理器
		 * 
		 * \param cfg 引擎配置参数
		 * \return bool 引擎初始化是否成功
		 */
		bool initEngine(WTSVariant* cfg);

	private:
		TraderAdapterMgr	_traders;		///< 交易适配器管理器，管理模拟交易接口
		ParserAdapterMgr	_parsers;		///< 行情解析器管理器，管理模拟行情源
		UftStrategyMgr		_stra_mgr;		///< UFT策略管理器，管理测试策略

		WtUftEngine			_engine;		///< UFT引擎实例，核心测试对象

		WTSBaseDataMgr		_bd_mgr;		///< 基础数据管理器，提供合约信息等

		uint32_t			_times;			///< 测试次数，控制模拟数据量
		uint32_t			_core;			///< 绑定的CPU核心编号，0表示不绑定
	};
}

